﻿using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using AspAuthentication.Core;

namespace AspAuthentication.Persistence
{
    /// <summary>
    /// Defines the class DomainContext
    /// </summary>
    public class DomainContext : DbContext
    {
        /// <summary>
        /// This method is called when the model for a derived context has been initialized, but
        ///             before the model has been locked down and used to initialize the context.  The default
        ///             implementation of this method does nothing, but it can be overridden in a derived class
        ///             such that the model can be further configured before it is locked down.
        /// </summary>
        /// <remarks>
        /// Typically, this method is called only once when the first instance of a derived context
        ///             is created.  The model for that context is then cached and is for all further instances of
        ///             the context in the app domain.  This caching can be disabled by setting the ModelCaching
        ///             property on the given ModelBuidler, but note that this can seriously degrade performance.
        ///             More control over caching is provided through use of the DbModelBuilder and DbContextFactory
        ///             classes directly.
        /// </remarks>
        /// <param name="modelBuilder">The builder that defines the model for the context being created.</param>
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="DomainContext"/> class.
        /// </summary>
        /// <param name="connection">The connection.</param>
        public DomainContext(string connection) : base(connection) { }
        /// <summary>
        /// Gets or sets the membership users.
        /// </summary>
        /// <value>The membership users.</value>
        public DbSet<DomainUser> MembershipUsers { get; set; }
        /// <summary>
        /// Gets or sets the domain roles.
        /// </summary>
        /// <value>The domain roles.</value>
        public DbSet<DomainRole> DomainRoles { get; set; }
        /// <summary>
        /// Gets or sets the profiles.
        /// </summary>
        /// <value>The profiles.</value>
        public DbSet<Profile> Profiles { get; set; }
        /// <summary>
        /// Gets or sets the profile items.
        /// </summary>
        /// <value>The profile items.</value>
        public DbSet<ProfileItem> ProfileItems { get; set; }
    }
}